package com.sunny.blog.service;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sunny.blog.pojo.*;

import java.util.List;
import java.util.Map;

/**
 * @ClassName: BlogInfoService
 * @Description: 博客相关服务
 * @Author: sunt
 * @Date: 2020/4/14 14:12
 * @Version 1.0
 **/
public interface BlogInfoService {

    /**
     * 新增博客
     *
     * @param blogInfoBean
     * @return
     */
    void insertBlog(BlogInfoBean blogInfoBean);

    /**
     * 更新博客
     *
     * @param blogInfoBean
     * @return
     */
    void updateBlog(BlogInfoBean blogInfoBean);

    /**
     * 查询博客分类列表
     *
     * @return
     */
    List<BlogTypeBean> queryBlogTypeList();

    /**
     * 查询博客标签列表
     *
     * @return
     */
    List<BlogTagBean> queryBlogTagList();

    /**
     * 博客分页查询
     *
     * @return
     */
    IPage<BlogInfoBean> queryBlogPage(QueryBlogBean blogBean);

    /**
     * 查询博客详情信息
     * 为了解决前端遍历对象{key:val} 暂时返回list解决
     *
     * @param blogId 博客ID
     * @return
     */
    List<BlogInfoBean> queryBlogDetail(String blogId);

    /**
     * 更新阅读数
     * @param blogId
     */
    void updateBrowseNum(String blogId);

    /**
     * 新增博客与标签关联表
     *
     * @param tagIds
     * @param blogId
     */
    void insertBatchResTag(List<String> tagIds, String blogId);

    /**
     * 热门排行榜统计
     *
     * @return
     */
    IPage<BlogInfoBean> queryRanking();

    /**
     * 相似文章查询
     * @param blogId
     * @return
     */
    IPage<BlogInfoBean> querySimilar(String blogId);

    /**
     * 标签分类统计
     *
     * @return
     */
    List<TagGroupBean> queryTagGroupInfo();

    /**
     * 按分类统计
     * @return
     */
    List<BlogTypeBean> queryBlogTypeGroupInfo();

    /**
     * 查询公告
     * @return
     */
    List<BlogNoticeBean> queryNoticeList();

    /**
     * 发布评论
     * @param blogCommentBean
     * @return
     */
    String insertBlogComment(BlogCommentBean blogCommentBean);

    /**
     * 更新博客评论数量
     * @param blogId
     */
    void updateBlogCommentCnt(String blogId);

    /**
     * 更新评论状态
     * @param commentId
     */
    void updateCommentState(String commentId);

    /**
     * 记录审核失败原因，人工审核
     * @param commentId
     * @param remark
     */
    void updateCommentRemark(String commentId,String remark);

    /**
     * 博客品论列表查询
     * @return
     */
    List<BlogCommentBean> queryBlogComment(String blogId);

    /**
     * 文字审核
     * @param content
     * @return
     */
    JSONObject examineComment(String content);

    /**
     * 友链链表查询
     * @return
     */
    List<BlogLinkBean> queryBlogLinkList();

    /**
     * 友链申请
     * 此接口需要加密处理，防止恶意申请
     * @param blogLinkBean
     */
    JSONObject insertBlogLink(BlogLinkBean blogLinkBean);

    /**
     * 新增分类
     * @param typeBean
     */
    void insertBlogType(BlogTypeBean typeBean);

    /**
     * 新增标签
     * @param tagBean
     */
    void insertBlogTag(BlogTagBean tagBean);

    /**
     * 博客时光轴查询
     * @return
     */
    JSONArray queryBlogTime();

    /**
     * 博客按月统计
     * @return
     */
    List<Map<String, Object>> blogStaticByMonth();

    /**
     * 按发布日期统计博客归档信息
     * @param releaseDate
     * @return
     */
    List<BlogArchivBean> queryBlogByDate(String releaseDate);

    /**
     * 查询banner
     * @return
     */
    List<BlogBannerBean> queryBannerList();

    /**
     * 评论回复
     * @param replyBean
     */
    void insertBlogReply(BlogReplyBean replyBean);
}
